(define (split-at lst n)
  (define (helper first remain n)
	(if (null? remain)
		(cons first nil)
		(if (= 1 n)
			(cons first remain)
			(helper (append first (list (car remain))) (cdr remain) (- n 1))
		)  
	)
  )
  (if (= n 0)
	(cons nil lst)
	(helper (list (car lst)) (cdr lst) n)
  )
)


(define-macro (switch expr cases)
	(cons 'cond
		(map (lambda (case) (cons (eq? (car case) (eval expr)) (cdr case)))
    			cases))
)

